package _go

/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func removeNthFromEnd(head *ListNode, n int) *ListNode {
	if head == nil {
		return nil
	}
	//先创建一个带有头节点的返回列表  因为要记录n个节点的前一个节点 需要让快指针多走一步
	res := &ListNode{0, head}

	//制定左右指针
	s := res
	f := head

	//多移动一个方便找到N的前一个节点
	for i := 0; i < n; i++ {
		f = f.Next
	}
	for f != nil {
		s = s.Next
		f = f.Next
	}
	//删除节点
	s.Next = s.Next.Next
	return res.Next
}
